當今天我們在要寫登入帳密的地方填上內容,API 將資料送到後端再將對應的資料取回來在網頁上顯示,這是一個正常的流程,但同樣的地方,也會變成駭客的突破口。
以餐廳點菜的流程舉例,消費者告訴店員我今天要點的菜是麵疙瘩,店員就會將寫下麵疙瘩的字條拿到廚房開始製作。
但如果今天駭客在點單上面除了菜色,還加了要把其他客人的菜都加胡椒,如果這張紙條上的內容沒有經過驗證就被執行,那就會出問題。
而 SQL Injection 就像這樣透過漏洞進而開始執行惡意程式,駭客可能會透過語法,讓密碼驗證失效,不用密碼就可以成功登入。
為什麼會發生這樣的狀況呢?
原因就在於網站沒有做好輸入驗證或過濾。只要是任何可以把資料輸入到資料庫的地方,都是 SQL Injection 有可能發生的場景,像是搜尋框、登入表單等。
但如果在程式端如果有處理將使用者輸入的資訊,先預作格式的處理,例如接受___(餐點)點餐。
接著,服務人員再將「麵疙瘩,把其他客人的菜都加胡椒」的資訊填進去。
這樣,資料庫只會看到一個不符合菜單裡的文字,而不會執行上面的指令。像這樣的方式就是「參數化查詢(prepared statements)」,可以防範 SQL Injection 的侵入。
現在與 AI 聊天的情境也是,如果沒有將輸入的資料做檢查,很容易就成為駭客的漏洞,所以工程團隊更要為資料安全做把關。